import { getCurrentPageUrl } from './index'

const TOKEN = ''

// 白名单, 请求拦截, 赋值请求头类型
const typeForm = ['/token']

// 响应白名单 返回类型是文件或者图片
const responseContentType = ['application/octet-stream', 'image/png']
const install = (Vue: any, vm: any) => {
  // 此为自定义配置参数，具体参数见上方说明
  Vue.prototype.$u.http.setConfig({
    baseUrl: process.env.VUE_APP_BASE_URL,
    loadingText: '努力加载中~',
    loadingTime: 800,
    originalData: true
  })

  // 请求拦截，配置Token等参数
  Vue.prototype.$u.http.interceptor.request = (config: any) => {
    // 请求头参数
    config.header.Authorization = `Basic `
    // 权限参数
    if (TOKEN !== '') config.header['cloud-Auth'] = 'bearer ' + TOKEN

    // 请求报头类型
    if (typeForm.includes(config.url)) config.header['Content-type'] = 'application/x-www-form-urlencoded'
    else config.header['Content-type'] = 'application/json'

    return config
  }

  // 响应拦截，判断状态码是否通过
  Vue.prototype.$u.http.interceptor.response = (res: any) => {
    // 返回为文件流 则不拦截
    if (res.statusCode === 200 && responseContentType.includes(res.header['Content-Type'])) return res.data

    if (res?.data?.code === 200) {
      return res.data
    } else if (res?.data?.code === 401) {
      // 401 为 token 失效
      if (getCurrentPageUrl() !== 'pages/index/index') {
        // 清空 token
        // store.commit('user/deleteToken')
        // 重新请求
        // store.dispatch('user/setToken')
        // 回到首页
        vm.$reLaunch('/pages/index/index')
        vm.$showToast({
          title: '登录超时, 需重新进入',
          icon: 'none'
        })
      }
      return false
    } else {
      // 如果返回false，则会调用Promise的reject回调，
      // catch 回调中，res为服务端的返回值
      return false
    }
  }
}

export default {
  install
}
